/*
 * Esse arquivo é parte do Software de Segurança do LaPEC
 * 
 * Copyright (C) 2012-$AnoCorrente$ Dyego Ítallo Silva Ferreira
 * Copyright (C) 2012-$AnoCorrente$ Eduardo Moreira Barbosa
 * Copyright (C) 2012-$AnoCorrente$ João dos Santos Gonçalves
 * 
 * LaPEC é um Software Livre: Você pode redistribuí-lo e/ou modificá-lo
 * de acordo com os termos da Licença Pública Geral GNU (GNU General Public License)
 * conforme publicada pela Free Software Foundation (FSF). Essa permissão é atribuída
 * na versão 3 da Licença, ou (na sua opinião) qualquer versão.
 * 
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa,
 * se não, escreva para a Fundação do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA  02110-1301  USA
 * 
 * Se você tiver alguma dúvida e/ou quiser dar suporte ao desenvolvimento, favor entrar em
 * contato nos e-mails <dyegoitallo@gmail.com>, <barbosa.edrd@gmail.com>, <john.jsg@hotmail.com>.
 */
package dao.mysql;

import java.sql.SQLException;
import java.util.ArrayList;
import usuario.Usuario;

/**
 * Classe responsável pelas operações de consultas e inserir dados na tabela de
 * usuários do banco do projeto.
 *
 * @author João dos Santos Gonçalves
 */
public class BancoUsuario extends Operacoes {

    // ===============================================================================
    // Atributos
    // ===============================================================================    
    private String sql;

    // ===============================================================================
    // Métodos
    // ===============================================================================        
    /**
     * Método que cadastra o usuário ao banco de dados.
     *
     * @param matricula é o parametro da maticula do usuário já salva no banco.
     * @param tipoId é o identificador do tipo de categoria a qual o usuário
     * pertence.
     * @param nome do usuário a ser cadastrado.
     * @param senha a senha a ser salva do usuário a ser cadastrado.
     */
    public void cadastrarUsuario(Usuario novoUsuario, int cargo) {

        sql = "INSERT INTO lapec_biometria.usuario (matricula, cargo, nome, senha)"
                + "VALUES ('" + novoUsuario.getMatricula() + "'"
                + ",'" + cargo + "'"
                + ",'" + novoUsuario.getNome() + "'"
                + ",'" + novoUsuario.getSenha() + "')";

        executeStatement(sql);
    }

    /**
     * Lista todos os usuários cadastrados no sistema.
     *
     * @return um ArrayList de String com nome-matricula dos usuários
     * cadastrados.
     */
    public ArrayList<String> listarUsuario() {

        ArrayList<String> listaNomes = new ArrayList<String>();

        sql = "SELECT nome FROM lapec_biometria.usuario;";


        try {
            BancoDeDadosMySQL.STATEMENT = BancoDeDadosMySQL.CONNECTION.createStatement();
            BancoDeDadosMySQL.RESULTSET = BancoDeDadosMySQL.STATEMENT.executeQuery(sql);

            try {
                while (BancoDeDadosMySQL.RESULTSET.next()) {

                    // Variavel temporária para a consulta dos dados
                    String consulta = BancoDeDadosMySQL.RESULTSET.getString("nome")
                            + " - " + BancoDeDadosMySQL.RESULTSET.getInt("nome");

                    // Adicionando nome-matricula ao Array de String
                    listaNomes.add(consulta);

                }
            } catch (SQLException sQLException) {
                sQLException.printStackTrace();
            }

        } catch (SQLException sQLException) {
            sQLException.printStackTrace();
        }
        return listaNomes;
    }

    /**
     * Atualiza os dados do usuário no banco de dados.
     *
     * @param user é o objeto usuário que terá os dados modificados.
     */
    public void atualizarUsuario(Usuario user) {

        sql = "UPDATE lapec_biometria.usuario SET nome = ?, senha = ?, tipo_id = ? WHERE matricula = ?;";

        try {
            BancoDeDadosMySQL.PREPAREDSTATEMENT = BancoDeDadosMySQL.CONNECTION.prepareStatement(sql);
            BancoDeDadosMySQL.PREPAREDSTATEMENT.setString(1, user.getNome());
            BancoDeDadosMySQL.PREPAREDSTATEMENT.setString(2, user.getSenha());
            BancoDeDadosMySQL.PREPAREDSTATEMENT.setInt(3, user.getCargo());
            BancoDeDadosMySQL.PREPAREDSTATEMENT.setString(4, user.getMatricula());

            BancoDeDadosMySQL.PREPAREDSTATEMENT.execute();
            BancoDeDadosMySQL.PREPAREDSTATEMENT.close();
        } catch (SQLException sQLException) {
            sQLException.printStackTrace();
        }
    }

    /**
     * Remove o usuário do banco de dados da aplicação.
     *
     * @param user é o usuário que será removido
     */
    public void removerUsuario(Usuario user) {

        sql = "DELETE FROM lapec_biometria.usuario WHERE matricula = ?;";

        try {

            BancoDeDadosMySQL.PREPAREDSTATEMENT = BancoDeDadosMySQL.CONNECTION.prepareStatement(sql);
            BancoDeDadosMySQL.PREPAREDSTATEMENT.setString(1, user.getMatricula());
            BancoDeDadosMySQL.PREPAREDSTATEMENT.execute();
            BancoDeDadosMySQL.PREPAREDSTATEMENT.close();
        } catch (SQLException sQLException) {
            sQLException.printStackTrace();
        }
    }
}
